package uba.algo3.tp3.tsp;

import static org.junit.Assert.assertEquals;

import java.util.ArrayList;

public class Memo
{
	Pair tams;
	int[][] m;
	int vecesAccedido = 0;
	
	public int getVecesAccedido()
	{
		return vecesAccedido;
	}
	
	public Memo(Pair tams)
	{
		this.tams = tams;
		int n = tams.getTam1() + tams.getTam2();
		m = new int[n][n];
	}
	
	public void marcarNums(ArrayList<Integer> l1, ArrayList<Integer> l2)
	{
		vecesAccedido++;
		assertEquals(l1.size(),tams.getTam1());
		assertEquals(l2.size(),tams.getTam2());
		
		for(int i = 0; i < tams.getTam1();i++)
		{
			int elem = l1.get(i);
			m[elem][i]++;
		}
		
		for(int j = tams.getTam1(); j < tams.getTam2() + tams.getTam1();j++)
		{
			int elem = l2.get(j-tams.getTam1());
			m[elem][j]++;		
		}
		
		
	}

	public int buscarElMenorPosible(int indice, ArrayList<Integer> numsUsados)
	{
		int menor = Integer.MAX_VALUE;
		
		for(int i = 1; i < m.length; i++)
		{
			int n = m[i][indice];
			if(!numsUsados.contains(i) && (menor == Integer.MAX_VALUE || n < m[menor][indice]))
			{
				menor = i;
			}
		}
		return menor;
	}
}
